import cv2
import numpy as np


# 定义一个函数用于显示图像
def show_img(name, img):
    cv2.imshow(name, img)  # 使用OpenCV的imshow函数显示图像
    cv2.waitKey(0)  # 等待任意键被按下
    cv2.destroyAllWindows()  # 关闭所有OpenCV创建的窗口


# 礼帽 = 闭运算算结果 - 原始输入
# 读取图像文件，并将其转换为灰度图像
img = cv2.imread('name.jpg', cv2.IMREAD_GRAYSCALE)

# 应用二值化阈值处理
ret, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)

# 创建一个3x3的结构元素
kernel = np.ones((3, 3), np.uint8)

# 应用形态学闭运算
closing = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)

# 应用形态学黑帽操作
black_top = cv2.morphologyEx(binary, cv2.MORPH_BLACKHAT, kernel)

# 将闭运算结果、原始二值图像和黑帽操作结果垂直堆叠在一起
res = np.vstack((closing, binary, black_top))

# 显示堆叠后的图像
show_img('res', res)
